package com.yl.chainStore.entity.pay

import com.alibaba.druid.support.json.JSONUtils
import com.alibaba.fastjson.JSONObject
import com.baomidou.mybatisplus.annotation.IdType
import com.baomidou.mybatisplus.annotation.TableField
import com.baomidou.mybatisplus.annotation.TableId
import com.baomidou.mybatisplus.annotation.TableName
import com.yl.chainStore.common.enums.Status
import com.yl.chainStore.entity.OtherShow
import com.yl.chainStore.payrule.item.ItemRule
import com.yl.chainStore.payrule.item.ItemRuleTypeEnum
import com.yl.common.annotation.NoArg
import com.yl.common.getContext
import java.util.*

/**
 * <p>
 *订单项目优惠设置
 * </p>
 *
 * @author cxw
 * @since 2021-09-13
 */
@NoArg
@TableName(value = "pay_customer_order_item_discount_rule",autoResultMap = true)
data class PayCustomerOrderItemDiscountRule(

	/**
	 * 订单项目优惠设置
	 */
	@TableId(value = "id", type = IdType.AUTO)
	var id: Long,


	/**
	 * 状态
	 */
	@TableField("status")
	var status: Status = Status.CLOSE,

	/**
	 * 公司id
	 */
	@TableField("company_id")
	var companyId: Long = getContext().companyId,

	/**
	 * 子公司id
	 */
	@TableField("sub_company_id")
	var subCompanyId: Long ?= null,


	/**
	 * 内容类型
	 */
	@TableField("type")
	var type: ItemRuleTypeEnum = ItemRuleTypeEnum.DEFAULT,

	/**
	 * 排序
	 */
	@TableField("order_num")
	var orderNum: Int = 99,

	/**
	 * 开始时间
	 */
	@TableField("start_time")
	var startTime: Date,

	/**
	 * 结束时间
	 */
	@TableField("end_time")
	var endTime: Date,

	/**
	 * 创建时间
	 */
	@TableField("create_time")
	var createTime: Date = Date(),

	/**
	 * 最后修改时间
	 */
	@TableField("update_time")
		var updateTime: Date = Date(),

	/**
	 * 创建人
	 */
	@TableField("create_user_id")
	var createUserId: Long = getContext().userId,

	/**
	 * 最后修改人
	 */
	@TableField("update_user_id")
	var updateUserId: Long = getContext().userId,

	/**
	 * 数据有效性
	 */
	@TableField("enabled")
	var enabled :Int = 1,

	@TableField("title")
	var title:String
	) : OtherShow() {
	fun getOtherContentObj(): ItemRule {
		return if(other is Map<*, *>){
			JSONObject.parseObject(JSONUtils.toJSONString(other), type.clazz)
		}else{
			JSONObject.parseObject(other.toString(), type.clazz)
		}
	}


	val statusShow:Status
		get() {
			return if(status != Status.OPEN){
				status
			}else{

				if(startTime.after(Date())){
					Status.WAITING
				}else if(endTime.before(Date())){
					Status.END
				}else{
					status
				}

			}
		}


}
